/**
 * Copyright (c) 2007,中企动力华南研发中心<br>
 * All rights reserved.
 */
package com.ce.pms.charge.dao;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

import com.ce.pms.base.dao.IPmsBaseDao;
import com.ce.pms.charge.model.AbstractTrans;
import com.ce.pms.charge.model.ArCalculateModel;
import com.ce.pms.charge.model.DebitTransDomain;
import com.ce.pms.charge.model.PeriodDomain;
import com.ce.pms.charge.vo.ArCalculateVO;
import com.ce.pms.charge.vo.SubAccountBean;
import com.sitechasia.webx.core.support.Page;

/**
 * 功能描述：应收计算<br>
 * @author 罗军林 创建日期：2008-8-27
 */
public interface IArCalculateDao extends IPmsBaseDao<AbstractTrans>{

	/**
	 * 功能描述:读取满足应收计算条件的收费周期；<br>
	 * 收费周期与收费管理区一一对应，(用户有权限做应收计算，且未做应收计算的所有管理区)<br>
	 * <br>
	 * Create author:罗军林<br>
	 * Create on:2008-8-29<br>
	 * Edit author:<br>
	 * Edit on:<br>
	 * Why:<br>
	 */
	@SuppressWarnings("unchecked")
	public List<PeriodDomain> getPeriodList();

	/**
	 * 功能描述:<br>
	 * @param sqlKey
	 * @param parameters
	 * @return<br>
	 * Create author:罗军林<br>
	 * Create on:2008-9-3<br>
	 * Edit author:<br>
	 * Edit on:<br>
	 * Why:<br>
	 */
	public List<Object[]> querySQL(String sqlKey, Object[] parameters);

	/**
	 * 功能描述:批量插入交易<br>
	 * @param parameterList<br>
	 * Create author:罗军林<br>
	 * Create on:2008-9-8<br>
	 * Edit author:<br>
	 * Edit on:<br>
	 * Why:<br>
	 */
	public void insertTransaction(List<Object[]> parameterList);

	/**
	 * 功能描述:批量更新子帐户余额<br>
	 * @param parameterList<br>
	 * Create author:罗军林<br>
	 * Create on:2008-9-8<br>
	 * Edit author:<br>
	 * Edit on:<br>
	 * Why:<br>
	 */
	public void updateSubAccountBalance(List<Object[]> parameterList);

	/**
	 * 功能描述:查询指定管理区指定楼栋下收费类型为常规费用的房间列表，包括房间的帐户、标准<br>
	 * 注：考虑到数据量的庞大性，为保证程序能相对稳定的运行，故进行分批查询<br>
	 * 结果集中为房间对象数组的LIST，对象数组的顺序为：房号ID，应收费用，交易码ID，版本ID，帐户ID<br>
	 * 此顺序与入帐操作comptabiliser有密切关系<br>
	 * @param periodDomain  当前收费周期
	 * @param buildingId	楼栋ID
	 * @param pageNO		页码
	 * @param pageSize		每次查询的记录数
	 * @return <br>
	 * Create author:罗军林<br>
	 * Create on:2008-9-1<br>
	 * Edit author:<br>
	 * Edit on:<br>
	 * Why:<br>
	 */
	public List<ArCalculateModel> getHouseListWithGeneral(PeriodDomain periodDomain,Long buildingId,int pageNO,int pageSize);

	/**
	 * 功能描述:查询指定管理区指定楼栋下收费类型为固定费用的房间列表，包括房间的帐户、标准<br>
	 * 注：考虑到数据量的庞大性，为保证程序能相对稳定的运行，故进行分批查询<br>
	 * 结果集中为房间对象数组的LIST，对象数组的顺序为：房号ID，应收费用，交易码ID，版本ID，帐户ID<br>
	 * 此顺序与入帐操作comptabiliser有密切关系<br>
	 * @param periodDomain  当前收费周期
	 * @param buildingId	楼栋ID
	 * @param pageNO		页码
	 * @param pageSize		每次查询的记录数
	 * @return <br>
	 * Create author:罗军林<br>
	 * Create on:2008-9-1<br>
	 * Edit author:<br>
	 * Edit on:<br>
	 * Why:<br>
	 */
	public List<ArCalculateModel> getHouseListWithFixed(PeriodDomain periodDomain,Long buildingId,int pageNO,int pageSize);

	/**
	 * 功能描述:查询指定管理区指定楼栋下收费类型为走表费用的房间列表，包括房间的帐户、标准<br>
	 * 注：考虑到数据量的庞大性，为保证程序能相对稳定的运行，故进行分批查询<br>
	 * 结果集中为房间对象数组的LIST，对象数组的顺序为：房号ID，版本ID，走表数据量，交易码ID，走表ID，原始数据ID列表(用逗号隔开)，帐户ID<br>
	 * 此顺序与入帐操作comptabiliser有密切关系<br>
	 * @param periodDomain  当前收费周期
	 * @param buildingId	楼栋ID
	 * @param pageNO		页码
	 * @param pageSize		每次查询的记录数
	 * @return <br>
	 * Create author:罗军林<br>
	 * Create on:2008-9-1<br>
	 * Edit author:<br>
	 * Edit on:<br>
	 * Why:<br>
	 */
	public List<ArCalculateModel> getHouseListWithMeter(PeriodDomain periodDomain,Long buildingId,int pageNO,int pageSize);

	/**
	 * 功能描述:批量增加原始数据-交易关系表<br>
	 * @param parameterList<br>
	 * Create author:罗军林<br>
	 * Create on:2008-9-4<br>
	 * Edit author:<br>
	 * Edit on:<br>
	 * Why:<br>
	 */
	public void addBatchDatasRTransaction(List<Object[]> parameterList);

	/**
	 * 功能描述:批量更新原始数据状态为已经计算<br>
	 * @param parameterList 原始数据ID列表<br>
	 * Create author:罗军林<br>
	 * Create on:2008-9-4<br>
	 * Edit author:<br>
	 * Edit on:<br>
	 * Why:<br>
	 */
	public void updateBatchDatasStatus(List<Object[]> parameterList);

	/**
	 * 功能描述:查询指定管理区下的所有子帐户<br>
	 * @param chargePrecinctId
	 * <br>
	 * Create author:罗军林<br>
	 * Create on:2008-9-11<br>
	 * Edit author:<br>
	 * Edit on:<br>
	 * Why:<br>
	 */
	public Map<Long,SubAccountBean> querySubaccount(Long chargePrecinctId);

	public Page queryDebitTrans(ArCalculateVO searchCondition);

	public Page queryChargeTotalList(ArCalculateVO searchCondition);

	/**
	 * 功能描述:更新是本金交易且未缴费的主交易ID为本记录主键<br>
	 * <br>
	 * Create author:罗军林<br>
	 * Create on:2008-9-11<br>
	 * Edit author:<br>
	 * Edit on:<br>
	 * Why:<br>
	 */
	public void updateMtranId();

	public String queryReCalculateTran(String houseIds,Long periodId,String chargetype);

	public Map<Long,BigDecimal> querySumDebitBySubAccountId(Long periodId, String tranIds);


	/**
	 * 功能描述:删除交易记录<br>
	 * @param parameterList<br>
	 * Create author:罗军林<br>
	 * Create on:2008-9-12<br>
	 * Edit author:<br>
	 * Edit on:<br>
	 * Why:<br>
	 */
	public void deleteTransaction(Long periodId,String tranIds);

	public List<ArCalculateModel> queryFixedByHouseIds(String houseIds,Long periodId);

	public List<ArCalculateModel> queryGeneralByHouseIds(String houseIds,Long periodId);

	public List<ArCalculateModel> queryMeterByHouseIds(String houseIds,Long periodId);

	public void updateSubAccountBalanceSub(List<Object[]> parameterList);

	public void deleteDataSRTransaction(String tranIds);

	/**
	 * 功能描述:查找指定原始数据ID的交易<br>
	 * @param datasId
	 * @return<br>
	 * Create author:罗军林<br>
	 * Create on:2008-10-9<br>
	 * Edit author:<br>
	 * Edit on:<br>
	 * Why:<br>
	 */
	public DebitTransDomain findDebitTransByChargeDatasId(Long datasId);
}
